/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Action;

import BE.Condicionpago;
import BE.Producto;
import BL.BonificacionxProdBL;
import BL.ClienteBL;
import BL.CondicionPagoBL;
import BL.ProductoBL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.actions.LookupDispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import java.util.*;
import javax.servlet.http.HttpSession;


/**
 *
 * @author jcguzmanr
 */
public class mobProductosAction extends LookupDispatchAction {
    
    /* forward name="success" path="" */
    private final static String SUCCESS = "success";
    
    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */

    protected Map getKeyMethodMap() {
      Map map = new HashMap();
      map.put("button.CargarLineaPedido", "cargarListaPedido");
      map.put("button.BuscarTodosUP", "buscarTodosProductos");
      map.put("button.BuscarTodosDOWN", "buscarTodosProductos");
      map.put("button.BuscarProductos", "buscarProductosCriterios");
      return map;
    }


    public ActionForward cargarListaPedido(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
           throws java.lang.Exception {
      // TODO: implement add method


        String objProductos = request.getParameter("arrListaPedido");

        ProductoBL objProductoBL = new ProductoBL();

        HttpSession session = request.getSession();

        int id_cliente=Integer.parseInt((String)session.getAttribute("IdCliente"));
        ClienteBL objClienteBL= new ClienteBL();
        Double descuentoCliente;
        try {
            descuentoCliente=objClienteBL.buscarDescuento(id_cliente)/100;
        }
        catch (Exception e)
        {
            descuentoCliente=0.0;
        }
        

        List<String> arrCantidades = objProductoBL.cargarProductoPedido(objProductos,(List<Producto>)session.getAttribute("arrProductos"));
        List<String> arrPrecio = objProductoBL.cargarPrecio(objProductos,(List<Producto>)session.getAttribute("arrProductos"));

        session.setAttribute("arrLineaPedido", objProductoBL.getArrProducto());
        session.setAttribute("arrCantidades", arrCantidades);
        session.setAttribute("arrPrecio", arrPrecio);
        session.setAttribute("descuentoCliente", descuentoCliente.toString());

        //jcguzmanr
        CondicionPagoBL objCondicionPagoBL = new CondicionPagoBL();
        List<Condicionpago> arrCondicionpago = objCondicionPagoBL.cargarCondicionPago();
        Condicionpago objCondicionpago = new Condicionpago(0,"Escoja una cond. de pago");
        arrCondicionpago.add(0,objCondicionpago);
        System.out.println("Se seteo el arreglo xD! " + arrCondicionpago.size());
        session.setAttribute("arrCondicionpago", arrCondicionpago);
        //
        return mapping.findForward("mostrarDetallePedido");
    }

        public ActionForward buscarTodosProductos(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
           throws java.lang.Exception {
      // TODO: implement add method


        HttpSession session = request.getSession();

        session.removeAttribute("arrProductosBusqueda");

        String strProdElegidos = request.getParameter("arrListaPedido");

        if(strProdElegidos.equals(""))
        {
        session.setAttribute("arrProductosBusqueda", session.getAttribute("arrProductos"));

        }
        else
        {
        ProductoBL objProductoBL = new ProductoBL();
        List<String> arrCantidades = objProductoBL.ordenarProductos(strProdElegidos,(List<Producto>)session.getAttribute("arrProductos"));
        BonificacionxProdBL objBonificacion = new BonificacionxProdBL();
        session.setAttribute("arrProductosBusqueda", objProductoBL.getArrProducto());
        session.setAttribute("arrCantidades", arrCantidades);
        session.setAttribute("arrBonificaciones", objBonificacion.buscarBonxProd(objProductoBL.getArrProducto()));
        }
        return mapping.findForward("buscarProductos");
    }

    public ActionForward buscarProductosCriterios(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
           throws java.lang.Exception {
      // TODO: implement add method


        HttpSession session = request.getSession();

        session.removeAttribute("arrProductosBusqueda");

        List<Producto> arrProductosTotales= new ArrayList((ArrayList<Producto>)session.getAttribute("arrProductos"));
        
        String strNomProducto = request.getParameter("nomProducto");
        String strMin = request.getParameter("Min");
        String strMax = request.getParameter("Max");
        String strLineaProducto = request.getParameter("lineaProducto");

        String strProdElegidos = request.getParameter("arrListaPedido");
        ProductoBL objProductoBL = new ProductoBL();

        List<String> arrCantidades = objProductoBL.ordenarProductosCriterios(strProdElegidos,arrProductosTotales);

        List <Producto> arrProductoBusqueda = cargarBusqueda(strLineaProducto,strNomProducto,strMin,strMax,arrProductosTotales);

        BonificacionxProdBL objBonificacion = new BonificacionxProdBL();

        if(arrProductoBusqueda.size()>0)
        {
            objProductoBL.integrarResultado(arrProductoBusqueda);
            session.setAttribute("arrProductosBusqueda", objProductoBL.getArrProducto());
            session.setAttribute("arrBonificaciones", objBonificacion.buscarBonxProd(objProductoBL.getArrProducto()));
        }
        else
        {
            if(objProductoBL.getArrProducto().size()>0)
            {
            session.setAttribute("arrProductosBusqueda", objProductoBL.getArrProducto());
            session.setAttribute("arrBonificaciones", objBonificacion.buscarBonxProd(objProductoBL.getArrProducto()));
            }
            else
            {session.setAttribute("arrProductosBusqueda", arrProductosTotales);
            session.setAttribute("arrBonificaciones", objBonificacion.buscarBonxProd(arrProductosTotales));
            }

         request.setAttribute("strMensaje", "No se encontró ningún resultado para la busqueda solicitada");
        }

        session.setAttribute("arrCantidades", arrCantidades);
        return mapping.findForward("buscarProductos");
    }

    public List<Producto> cargarBusqueda(String strLineaProducto, String strNomProducto, String strMin, String strMax,List<Producto> arrProductosTotales)
    {
    List<Producto> arrResultado= new ArrayList();
    boolean boolNom=true;
    boolean boolMin=true;
    boolean boolMax=true;
    boolean boolLinea=true;

    for (int i=0;i<arrProductosTotales.size();i++)
    {
        if((strLineaProducto!=null)&&(!strLineaProducto.equals(""))&&(!strLineaProducto.equals("0")))
        {
            if(arrProductosTotales.get(i).getLineaproducto().getSrlLineaproducto()!=Integer.parseInt(strLineaProducto))
            {
                boolLinea=false;
            }
        }

        if((strNomProducto!=null)&&(!strNomProducto.equals("")))
        {
            if((!(arrProductosTotales.get(i).getCvNombre().toUpperCase().contains(strNomProducto.toUpperCase()))))
            {
                boolNom=false;
            }
        }


        if((strMin!=null)&&(!strMin.equals("")))
        {
           if(arrProductosTotales.get(i).getRlPreciocosto().doubleValue()<Double.parseDouble(strMin))
           {
            boolMin=false;
           }
        }

        if((strMax!=null)&&(!strMax.equals("")))
        {
           if(arrProductosTotales.get(i).getRlPreciocosto().doubleValue()>Double.parseDouble(strMax))
           {
            boolMax=false;
           }
        }

        if((boolNom)&&(boolMin)&&(boolMax)&&(boolLinea))
        {
        arrResultado.add(arrProductosTotales.get(i));
        }
        
        boolNom=true;
        boolMin=true;
        boolMax=true;
        boolLinea=true;
      }

    return arrResultado;
    }

}
